package com.ruoyi.project.remake.domain.utils;


import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
/**
 * @program: ruoyi
 * @description:
 * @author: wangfang
 * @create: 2021-12-30 14:25
 **/

public class ImageToPdfUtil{
    /**
     * 保存到本地
     *
     * @param imageList 图片文件夹地址
     * @param pdfPath         PDF文件保存地址
     */
    public static void toPdf(List<String> imageList, String pdfPath) {
        //创建一个文档对象imageFolderPath
        Document doc = new Document();
        try {
            // 输入流
            FileOutputStream fos = new FileOutputStream(pdfPath);
            // 写入PDF文档
            PdfWriter.getInstance(doc, fos);
            //开启文档
            doc.open();
            // 获取图片文件夹对象
            if(ObjectUtil.isEmpty(imageList)){
                throw  new RuntimeException("路径下文件为空");
            }
            File[] files = new File[imageList.size()];
            for(int i=0;i<imageList.size();i++){
                File file = new File(imageList.get(i));
                files[i]=file;
            }
            // 循环获取图片文件夹内的图片
            if (files != null && files.length > 0) {
                for (int i=0;i<files.length;i++) {
                    File f=files[i];
                    if (f.getName().endsWith(".png")
                            || f.getName().endsWith(".jpg")
                            || f.getName().endsWith(".gif")
                            || f.getName().endsWith(".jpeg")
                            || f.getName().endsWith(".tif")) {
                        String imagePath = imageList.get(i);
                        // 实例化图片
                        Image image = Image.getInstance(imagePath);
                        //设置图片居中显示
                        image.setAlignment(Image.MIDDLE);
                        // 添加图片到文档
                        doc.add(image);
                        // 换行,增加间距
                        doc.add(new Paragraph("\n"));
                    }
                }
            }
            // 关闭文档
            doc.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 通过流下载
     * @param imageList image集合
     * @param response  响应
     */
    public static void downloadPdf(List<BufferedImage> imageList, HttpServletResponse response) {
        String fileName = "材料二维码.pdf";
        //创建一个文档对象
        Document doc = new Document();
        try(OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());) {
            // 防止中文乱码
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.reset();
            response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
            response.setContentType("application/octet-stream;charset=UTF-8");
            // 写入PDF文档
            PdfWriter.getInstance(doc, outputStream);
            //开启文档
            doc.open();
            // 循环获取图片文件夹内的图片
            if (CollectionUtil.isNotEmpty(imageList)) {
                for (BufferedImage bufferedImage : imageList) {
                    // 实例化图片
                    Image image = Image.getInstance(bufferedImage, null);
                    //设置图片居中显示
                    image.setAlignment(Image.MIDDLE);
                    // 添加图片到文档
                    doc.add(image);
                    // 换行,增加间距
                    doc.add(new Paragraph("\n"));
                }
            }
            // 关闭文档
            doc.close();
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {

    }
}
